package com.hoshiicloud.lessee.feign;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hoshiicloud.common.query.OmnipotentParam;
import com.hoshiicloud.common.query.OmnipotentWrapper;
import com.hoshiicloud.common.rpc.Response;
import com.hoshiicloud.common.utils.tree.GoodsCategoryWithGoodNumTree;
import com.hoshiicloud.common.utils.tree.Menu;
import com.hoshiicloud.goods.entity.goods.*;
import com.hoshiicloud.goods.entity.sku.BaseSku;
import com.hoshiicloud.goods.entity.sku.ExtSku;
import com.hoshiicloud.goods.entity.sku.ProductManage;
import com.hoshiicloud.goods.entity.sku.VendorGoodsSku;
import com.hoshiicloud.goods.entity.spu.*;
import com.hoshiicloud.goods.param.ListSkuSpuParam;
import com.hoshiicloud.goods.param.category.GoodsSpecificationsValuesTypeAddParam;
import com.hoshiicloud.goods.param.category.GoodsSpecificationsValuesTypeQueryParam;
import com.hoshiicloud.goods.param.category.GoodsSpecificationsValuesTypeUpdateParam;
import com.hoshiicloud.goods.param.goods.*;
import com.hoshiicloud.goods.param.sku.*;
import com.hoshiicloud.goods.param.spu.*;
import com.hoshiicloud.goods.vo.GoodsPropertiesPageVo;
import com.hoshiicloud.goods.vo.GoodsPropertiesVo;
import com.hoshiicloud.goods.vo.GoodsSpecificationsValuesVo;
import com.hoshiicloud.goods.vo.ListSpuSkuVo;
import com.hoshiicloud.goods.vo.sku.BaseSkuVo;
import com.hoshiicloud.lessee.feign.hystrix.LesseeGoodsFeignServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 *  2019/8/7 18:14 qry
 * 类目属性参数 模块
 */
@FeignClient(name = "hoshiicloud-goods", fallback = LesseeGoodsFeignServiceFallback.class)
public interface LesseeGoodsFeignService {
    //TODO↓公共属性 ↓↓公共属性 ↓↓公共属性 ↓↓公共属性 ↓↓公共属性 ↓↓公共属性 ↓↓公共属性 ↓公共属性 ↓↓公共属性 ↓
    /**
     * 11:08 2019/8/9 qry
     * 公共属性分页列表
     **/
    @PostMapping("/goods/public-properties/getPage")
    Response<Page<PublicProperties>> getPublicPropertiesPage(@RequestBody PublicPropertiesQueryParam param);

    /**
     * 11:08 2019/8/9 qry
     * 公共属性保存
     **/
    @PostMapping("/goods/public-properties/save")
    Response<Boolean> savePublicProperties(@RequestBody PublicPropertiesAddParam param);

    /**
     *11:08 2019/8/9 qry
     * 公共属性更新
     **/
    @PutMapping("/goods/public-properties/update")
    Response<Boolean> updatePublicProperties(@RequestBody PublicPropertiesUpdateParam param);

    /**
     *  11:08 2019/8/9 qry
     * 公共属性下拉框
     **/
    @GetMapping("/goods/public-properties/dropdownBox")
    Response<List<String>> publicPropertiesDropdownBox(@RequestParam("companyId") Long companyId,@RequestParam("propertyName") String propertyName);
    //TODO↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑↑公共属性 ↑



    //TODO↓商品参数属性 ↓↓商品参数属性 ↓↓商品参数属性 ↓↓商品参数属性 ↓↓商品参数属性 ↓↓商品参数属性 ↓↓商品参数属性 ↓
    /**
     * 11:08 2019/8/9 qry
     * 商品属性分页列表
     **/
    @PostMapping("/goods/goods-properties/getPage")
    Response<Page<GoodsPropertiesPageVo>> getGoodsPropertiesPage(@RequestBody GoodsPropertiesQueryParam param);

    /**
     * 11:08 2019/8/9 qry
     * 商品属性添加
     **/
    @PostMapping("/goods/goods-properties/save")
    Response<Boolean> saveGoodsProperties(@RequestBody GoodsPropertiesAddParam param);

    /**
     *  11:08 2019/8/9 qry
     * 商品属性更新
     **/
    @PutMapping("/goods/goods-properties/update")
    Response<Boolean> updateGoodsProperties(@RequestBody GoodsPropertiesUpdateParam param);

    /**
     * 11:08 2019/8/9 qry
     * 商品属性删除
     **/
    @DeleteMapping("/goods/goods-properties/delete/{id}")
    Response<Boolean> deleteGoodsProperties(@PathVariable("id") Long id);
    //TODO↑商品参数属性 ↑↑商品参数属性 ↑↑商品参数属性 ↑↑商品参数属性 ↑↑商品参数属性 ↑↑商品参数属性 ↑↑商品参数属性 ↑



    /**
     * 11:52 2019/8/9 qry
     * 根据类目获取商品属性
     **/
    @GetMapping("/goods/goods-properties/getProperByCateId")
    Response<List<GoodsPropertiesVo>> getGoodsProperByCateId(@RequestParam("categoryId") Long categoryId);

    //==========================================goodsCategory=========================================

    /**
     * 11:08 2019/8/9 qry
     * 根据ID 查询商品类目信息
     **/
    @GetMapping("/goods/goods-category/{id}")
    Response<GoodsCategory> queryGoodsCategoryById(@PathVariable("id") Long id) ;

    /**
     * 11:08 2019/8/9 qry
     * 商品类目添加
     **/
    @PostMapping("/goods/goods-category/saveEntity")
    Response<Long> saveGoodsCategory(@RequestBody GoodsCategory entity);

    /**
     * 11:08 2019/8/9 qry
     * 商品类目更新
     **/
    @PutMapping("/goods/goods-category/updateByIdEntity")
    Response<Boolean> updateGoodsCategory(@RequestBody GoodsCategory entity);

    /**
     * 删除商品类目表
     */
    @DeleteMapping("/goods/goods-category/delete/{id}")
    Response<Boolean> deleteGoodsCategory(@PathVariable("id") Long id);

    /**
     * 14:28 2019/8/9 qry
     * 商品类目查询,树状数据(不包含禁用)
     **/
    @GetMapping("/goods/goods-category/getCategorys")
    Response<List<Menu>> getCategorys(@RequestParam("companyId") Long companyId);

    /**
     * 14:28 2019/8/9 qry
     * 商品类目查询带商品数量,树状数据
     **/
    @GetMapping("/goods/goods-category/getCategorys2")
    Response<List<GoodsCategoryWithGoodNumTree>> getCategorys2(@RequestParam("companyId") Long companyId) ;

    /**
     * 14:28 2019/8/9 qry
     * 商品类目查询,树状数据(含禁用)
     **/
    @GetMapping("/goods/goods-category/getCategorys3")
    Response<List<Menu>> getCategorys3(@RequestParam("companyId") Long companyId);

    /**
     * 14:43 2019/8/9 qry
     * 修改类目的启用禁用状态
     **/
    @PutMapping("/goods/goods-category/updateStatus")
    Response<Boolean> updateGoodsCategoryStatus(@RequestBody GoodsCategoryStatusUpdateParam param);

    /**
     *  根据三级类目id查询类目名称
     * @param categoryContextQueryStr 类目Id串
     * @return 类目名称以 > 的形式分隔
     */
    @GetMapping("/goods/goods-category/getCategoryContext")
    Response<String> getCategoryContext(@RequestParam("categoryContextQueryStr") String categoryContextQueryStr);

    //==========================================goodsCategoryProperties=========================================
    /**
     *  15:41 2019/8/9 qry
     * 批量新增 类目关联参数属性信息
     **/
    @PostMapping("/goods/goods-category-propertie/saveBatch")
    Response<Boolean> saveGoodsCategoryPropertieBatch(@RequestBody List<GoodsCategoryProperties> list);

    /**
     *  15:50 2019/8/9 qry
     * 删除 某类目下关联的参数属性
     **/
    @DeleteMapping("/goods/goods-category-propertie/deleteByCategoryId/{categoryId}")
    Response<Integer> deleteGoodsCategoryPropertieByCategoryId(@PathVariable("categoryId") Long categoryId);

    /**
     * 16:01 2019/8/9 qry
     * 获取某类目下的 参数属性信息
     **/
    @GetMapping("/goods/goods-category-propertie/listByCategoryId/{categoryId}")
    Response<List<GoodsProperties>> listGoodsCategoryProByCategoryId(@PathVariable("categoryId") Long categoryId);


    /**
     * 15:41 2019/8/9 qry
     * 批量新增 类目关联规格信息
     **/
    @PostMapping("/goods/goods-category-spec/saveBatch")
    Response<Boolean> saveGoodsCategorySpecBatch(@RequestBody List<GoodsCategorySpec> list);

    /**
     * 15:50 2019/8/9 qry
     * 删除 某类目下关联的规格
     **/
    @DeleteMapping("/goods/goods-category-spec/deleteByCategoryId/{categoryId}")
    Response<Integer> deleteGoodsCategorySpecByCategoryId(@PathVariable("categoryId") Long categoryId);

    /**
     * 16:01 2019/8/9 qry
     * 获取某类目下的 参数属性信息
     **/
    @GetMapping("/goods/goods-category-spec/listByCategoryId/{categoryId}")
    Response<List<GoodsSpecifications>> listGoodsCategorySpecByCategoryId(@PathVariable("categoryId") Long categoryId);


    //TODO↓规格值分类 ↓↓规格值分类 ↓↓规格值分类 ↓↓规格值分类 ↓↓规格值分类 ↓↓规格值分类 ↓↓规格值分类 ↓
    /**
     * 11:08 2019/8/9 qry
     * 规格值分类 分页列表
     **/
    @PostMapping("/goods/goods-spec-values-type/getPage")
    Response<Page<GoodsSpecificationsValuesType>> getGoodsSpecificationsValuesTypePage(@RequestBody GoodsSpecificationsValuesTypeQueryParam param);

    /**
     * 11:08 2019/8/9 qry
     * 新增规格值分类
     **/
    @PostMapping("/goods/goods-spec-values-type/save")
    Response<Boolean> saveGoodsSpecificationsValuesType(@RequestBody GoodsSpecificationsValuesTypeAddParam param);

    /**
     *  11:08 2019/8/9 qry
     * 修改规格值分类
     * @Author qry
     * @Date 11:08 2019/8/9 修改规格值分类
     **/
    @PutMapping("/goods/goods-spec-values-type/update")
    Response<Boolean> updateGoodsSpecificationsValuesType(@RequestBody GoodsSpecificationsValuesTypeUpdateParam param);

    /**
     * @Author qry
     * @Date 11:08 2019/8/9 删除规格值分类
     *2019/8/9  11:08  qry
     *  删除规格值分类
     **/
    @DeleteMapping("/goods/goods-spec-values-type/delete/{id}")
    Response<Boolean> deleteGoodsSpecificationsValuesType(@PathVariable("id") Long id);

    /**
     * 11:08 2019/8/9 qry
     *  规格值分类 下拉框
     * @Author qry
     * @Date 11:08 2019/8/9 规格值分类 下拉框
     **/
    @GetMapping("/goods/goods-spec-values-type/dropdownBox")
    Response<List<GoodsSpecificationsValuesType>> goodsSpecificationsValuesTypeDropdownBox(@RequestParam("companyId") Long companyId,
            @RequestParam("type") String type);
    //TODO↑规格值分类 ↑↑规格值分类 ↑↑规格值分类 ↑↑规格值分类 ↑↑规格值分类 ↑↑规格值分类 ↑↑规格值分类 ↑


    //TODO↓商品规格管理 ↓↓商品规格管理 ↓↓商品规格管理 ↓↓商品规格管理 ↓↓商品规格管理 ↓↓商品规格管理 ↓↓商品规格管理 ↓
    @PostMapping("/goods/goods-specifications/getPage")
    Response<Page<GoodsSpecifications>> getGoodsSpecPage(@RequestBody GoodsSpecificationsQueryParam param);

    @PostMapping("/goods/goods-specifications/save")
    Response<Boolean> saveGoodsSpec(@RequestBody GoodsSpecificationsAddParam param);

    @PutMapping("/goods/goods-specifications/update")
    Response<Boolean> updateGoodsSpec(@RequestBody GoodsSpecificationsUpdateParam param);

    @DeleteMapping("/goods/goods-specifications/delete/{id}")
    Response<Boolean> deleteGoodsSpec(@PathVariable("id") Long id);

    @PostMapping("/goods/goods-specifications-values/getPage")
    Response<Page<GoodsSpecificationsValuesVo>> getGoodsSpecValuesPage(@RequestBody GoodsSpecificationsValuesQueryParam param);

    @PostMapping("/goods/goods-specifications-values/save")
    Response<Boolean> saveGoodsSpecValues(@RequestBody GoodsSpecificationsValuesAddParam param);

    @PutMapping("/goods/goods-specifications-values/update")
    Response updateGoodsSpecValues(@RequestBody GoodsSpecificationsValuesUpdateParam param);

    @DeleteMapping("/goods/goods-specifications-values/delete/{id}")
    Response<Boolean> deleteGoodsSpecValues(@PathVariable("id") Long id);
    //TODO↑商品规格管理 ↑↑商品规格管理 ↑↑商品规格管理 ↑↑商品规格管理 ↑↑商品规格管理 ↑↑商品规格管理 ↑↑商品规格管理 ↑










}

